package com.example.demo.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JWTUtil {
    private static final String SECRET_KEY = "U2VjdXJlUmFuZG9tS2V5"; // 请使用安全的密钥

    // 获取 token
    public static String getToken(String data, long time) {
        try {
            return Jwts.builder()
                    .setSubject(data)
                    .setIssuedAt(new Date())
                    .setExpiration(new Date(System.currentTimeMillis() + time * 1000))
                    .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                    .compact();
        } catch (Exception e) {
            LogUtil.error("获取Token失败", e.getMessage());
            return null;
        }

    }

    // 验证 token
    public static boolean validateToken(String token) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token)
                    .getBody();
            return !claims.getExpiration().before(new Date()); // 检查是否过期
        } catch (Exception e) {
            LogUtil.error("验证 token异常", e.getMessage());
            return false; // 解析失败或过期
        }
    }

    // 解析 token
    public static String parseToken(String token) {
        try {
            if (validateToken(token)) {
                Claims claims = Jwts.parser()
                        .setSigningKey(SECRET_KEY)
                        .parseClaimsJws(token)
                        .getBody();
                return claims.getSubject(); // 返回主题（数据）
            } else {
                return null;
            }
        } catch (Exception e) {
            LogUtil.error("解析 token异常", e.getMessage());
            return null;
        }

    }

    // 删除 token（通常是通过设置过期时间来实现）
    public static Object deleteToken(String data) {
        try {
            getToken(data, 0);// 生成一个立即过期的 token
            return true;
        } catch (Exception e) {
            LogUtil.error("删除 token异常", e.getMessage());
            return false;
        }
    }
}